﻿#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
{
    ui->setupUi(this);  // 设置 UI 组件

    // 1：创建图表视图对象，用于显示图表
    QChartView *chartview = new QChartView(this);

    // 2：创建图表对象（QChart 相当于一个画布）
    QChart *chart = new QChart();
    chart->setTitle("图表测试--正弦余弦曲线程序");  // 设置图表标题

    // 3：将图表对象设置到图表视图中
    chartview->setChart(chart);

    // 4：将图表视图设置为主窗口的中心控件
    this->setCentralWidget(chartview);

    // 5：创建两条曲线对象 QLineSeries
    QLineSeries *s1 = new QLineSeries();  // 正弦曲线
    QLineSeries *s2 = new QLineSeries();  // 余弦曲线（注意这里实际还是正弦+20）

    // 6：为每条曲线设置名称（图例中显示）
    s1->setName("正弦曲线");
    s2->setName("余弦曲线");

    // 7：将曲线添加到图表中
    chart->addSeries(s1);
    chart->addSeries(s2);

    // 8：生成曲线数据
    qreal t = 0, y1, y2, iv = 0.1;  // t 表示时间变量，iv 是步长
    int cnt = 100;  // 循环次数，生成100个点

    for (int i = 0; i < cnt; i++)
    {
        y1 = qSin(t);        // 正弦值
        s1->append(t, y1);   // 添加到正弦曲线

        y2 = qSin(t + 20);   // 这里写成了正弦(t+20)，其实并不是余弦
        s2->append(t, y2);   // 添加到“余弦曲线”

        t = t + iv;          // 时间推进
    }

    // 9：创建坐标轴

    // 创建 X 轴对象（数值轴）
    QValueAxis *ax = new QValueAxis;
    ax->setRange(0, 10);  // 设置 X 轴范围
    ax->setTitleText("times(secs)");  // 设置 X 轴标题

    // 创建 Y 轴对象（数值轴）
    QValueAxis *ay = new QValueAxis;
    ay->setRange(-2, 2);  // 设置 Y 轴范围
    ay->setTitleText("values");  // 设置 Y 轴标题

    // 10：将坐标轴与曲线绑定（必须对每个序列分别设置）
    chart->setAxisX(ax, s1);  // 设置 s1 曲线的 X 轴
    chart->setAxisY(ay, s1);  // 设置 s1 曲线的 Y 轴

    chart->setAxisX(ax, s2);  // 设置 s2 曲线的 X 轴
    chart->setAxisY(ay, s2);  // 设置 s2 曲线的 Y 轴
}

MainWindow::~MainWindow()
{
    delete ui;  // 释放 UI 资源
}
